/*
 * Copyright (c) 2007-2020 西安交通信息投资营运有限公司 版权所有
 */

package com.xci.edu.core.dao;

import com.github.lvyanyang.annotation.Paging;
import com.xci.edu.core.entity.ExamPre;
import com.xci.edu.core.entity.ExamPreExtend;
import com.xci.edu.core.entity.ExamRecord;
import com.xci.edu.core.filter.ExamPreFilter;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 考试预约数据层
 * @author 马星俊 maxingjun@xci96716.com
 * @since 2020-11-24 18:00:15
 */
public interface ExamPreDao {
    /**
     * 新建考试预约
     * @param entity 考试预约实体
     * @return 返回影响的行数
     */
    int insert(@Param("entity") ExamPre entity);

    /**
     * 修改考试预约
     * @param entity 考试预约实体
     * @return 返回影响的行数
     */
    int update(@Param("entity") ExamPre entity);

    /**
     * 根据主键修改考试预约状态
     * @param id     考试预约主键
     * @param status 考试预约状态
     * @return 返回影响的行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Boolean status);

    /**
     * 根据主键删除考试预约
     * @param id 考试预约主键
     * @return 返回影响的行数
     */
    int deleteById(@Param("id") Long id);


    ///**
    // * 根据主键删除考试预约
    // * @param id 考试预约主键
    // * @param deleteId 删除标识
    // * @return 返回影响的行数
    // */
    //int deleteById(@Param("id") Long id, @Param("deleteId") Long deleteId});

    ///**
    // * 是否存在指定主键的考试预约
    // * @param id 考试预约主键
    // * @return 如果存在返回true
    // */
    //boolean existxById(@Param("id") Long id);

    ///**
    // * 是否存在指定名称的考试预约
    // * @param name 考试预约名称
    // * @param excludeId 排除的主键，如果为null则不指定排除的主键
    // * @return 如果存在返回true
    // */
    //boolean existxByName(@Param("name") String name, @Param("excludeId") Long excludeId);

    ///**
    // * 是否存在指定编码的考试预约
    // * @param code 考试预约编码
    // * @param excludeId 排除的主键，如果为null则不指定排除的主键
    // * @return 如果存在返回true, 否则返回false
    // */
    //boolean existxByCode(@Param("code") String code, @Param("excludeId") Long excludeId);


    /**
     * 根据主键查询单个考试预约
     * @param id 考试预约主键
     * @return 返回考试预约实体
     */
    ExamPreExtend selectById(@Param("id") Long id);

    ///**
    // * 根据编码查询单个考试预约
    // * @param code 考试预约编码
    // * @return 返回考试预约实体
    // */
    //ExamPre selectByCode(@Param("code") String code);

    /**
     * 根据学员主键查询当前时间所有的考试预约列表
     * @param studentId 学员主键
     * @return 返回考试记录实体
     */
    List<ExamPre> selectByStudentId(@Param("studentId") Long studentId);

    /**
     * 查询考试预约列表
     * @param filter 过滤条件
     * @return 返回考试预约列表
     */
    List<ExamPreExtend> selectList(@Param("filter") ExamPreFilter filter);

    /**
     * 查询考试预约分页列表
     * @param filter 过滤条件
     * @return 返回考试预约分页列表
     */
    /*
        allowSortNames = {"student_id","student_name","exam_start_date","exam_end_date","paper_id","paper_name","usable_count","pre_category","status","operate_date_time","remark"},
        sortNameMaps = {"student_id:student_id","student_name:student_name","exam_start_date:exam_start_date","exam_end_date:exam_end_date","paper_id:paper_id","paper_name:paper_name","usable_count:usable_count","pre_category:pre_category","status:status","operate_date_time:operate_date_time","remark:remark"}
    */
    @Paging
    List<ExamPreExtend> selectPageList(@Param("filter") ExamPreFilter filter);
}